Merge "Fix warning "ob_end_flush(): failed to delete and flush buffer" during uploads"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 27 Apr 2018 02:37:30 +0000 (02:37 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 27 Apr 2018 02:37:31 +0000 (02:37 +0000)
1  2 
includes/filerepo/FileRepo.php

@@@ -78,6 -78,10 +78,6 @@@ class FileRepo 
         */
        protected $scriptDirUrl;
  
 -      /** @var string Script extension of the MediaWiki installation, equivalent
 -       *    to the old $wgScriptExtension, e.g. .php5 defaults to .php */
 -      protected $scriptExtension;
 -
        /** @var string Equivalent to $wgArticlePath, e.g. https://en.wikipedia.org/wiki/$1 */
        protected $articleUrl;
  
                $optionalSettings = [
                        'descBaseUrl', 'scriptDirUrl', 'articleUrl', 'fetchDescription',
                        'thumbScriptUrl', 'pathDisclosureProtection', 'descriptionCacheExpiry',
 -                      'scriptExtension', 'favicon', 'thumbProxyUrl', 'thumbProxySecret'
 +                      'favicon', 'thumbProxyUrl', 'thumbProxySecret',
                ];
                foreach ( $optionalSettings as $var ) {
                        if ( isset( $info[$var] ) ) {
         * Get an array of arrays or iterators of file objects for files that
         * have the given SHA-1 content hashes.
         *
 -       * @param array $hashes An array of hashes
 -       * @return array An Array of arrays or iterators of file objects and the hash as key
 +       * @param string[] $hashes An array of hashes
 +       * @return array[] An Array of arrays or iterators of file objects and the hash as key
         */
        public function findBySha1s( array $hashes ) {
                $result = [];
         * STUB
         * @param string $prefix The prefix to search for
         * @param int $limit The maximum amount of files to return
 -       * @return array
 +       * @return LocalFile[]
         */
        public function findFilesByPrefix( $prefix, $limit ) {
                return [];
         */
        public function makeUrl( $query = '', $entry = 'index' ) {
                if ( isset( $this->scriptDirUrl ) ) {
 -                      $ext = isset( $this->scriptExtension ) ? $this->scriptExtension : '.php';
 -
 -                      return wfAppendQuery( "{$this->scriptDirUrl}/{$entry}{$ext}", $query );
 +                      return wfAppendQuery( "{$this->scriptDirUrl}/{$entry}.php", $query );
                }
  
                return false;
         * should use File::getDescriptionText().
         *
         * @param string $name Name of image to fetch
 -       * @param string $lang Language to fetch it in, if any.
 +       * @param string|null $lang Language to fetch it in, if any.
         * @return string|false
         */
        public function getDescriptionRenderUrl( $name, $lang = null ) {
         * Each file can be a (zone, rel) pair, virtual url, storage path.
         * It will try to delete each file, but ignores any errors that may occur.
         *
 -       * @param array $files List of files to delete
 +       * @param string[] $files List of files to delete
         * @param int $flags Bitwise combination of the following flags:
         *   self::SKIP_LOCKING      Skip any file locking when doing the deletions
         * @return Status
        /**
         * Checks existence of an array of files.
         *
 -       * @param array $files Virtual URLs (or storage paths) of files to check
 +       * @param string[] $files Virtual URLs (or storage paths) of files to check
         * @return array Map of files and existence flags, or false
         */
        public function fileExistsBatch( array $files ) {
         * Delete files in the deleted directory if they are not referenced in the filearchive table
         *
         * STUB
 -       * @param array $storageKeys
 +       * @param string[] $storageKeys
         */
        public function cleanupDeletedBatch( array $storageKeys ) {
                $this->assertWritableRepo();
                $status = $this->newGood();
                $status->merge( $this->backend->streamFile( $params ) );
  
-               ob_end_flush();
+               // T186565: Close the buffer, unless it has already been closed
+               // in HTTPFileStreamer::resetOutputBuffers().
+               if ( ob_get_status() ) {
+                       ob_end_flush();
+               }
  
                return $status;
        }
        /**
         * Get a callback function to use for cleaning error message parameters
         *
 -       * @return array
 +       * @return string[]
         */
        function getErrorCleanupFunction() {
                switch ( $this->pathDisclosureProtection ) {
        /**
         * Get an UploadStash associated with this repo.
         *
 -       * @param User $user
 +       * @param User|null $user
         * @return UploadStash
         */
        public function getUploadStash( User $user = null ) {
  
                $optionalSettings = [
                        'url', 'thumbUrl', 'initialCapital', 'descBaseUrl', 'scriptDirUrl', 'articleUrl',
 -                      'fetchDescription', 'descriptionCacheExpiry', 'scriptExtension', 'favicon'
 +                      'fetchDescription', 'descriptionCacheExpiry', 'favicon'
                ];
                foreach ( $optionalSettings as $k ) {
                        if ( isset( $this->$k ) ) {